#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int main()
//{
//	int year, month, day;
//	int count = 0;
//	for (year = 1900; year <= 9999; year++)
//	{
//		for (month = 1; month <= 12; month++)
//		{
//			switch (month)
//			{
//			case 1:
//			case 3:
//			case 5:
//			case 7:
//			case 8:
//			case 10:
//			case 12:
//				for (day = 1; day <= 31; day++)
//				{
//					int a = 0;
//					int b = 0;
//					int y = year;
//					int m = month;
//					int d = day;
//					while (y)
//					{
//						a += (y % 10);
//						y /= 10;
//					}
//					while (m)
//					{
//						b += (m % 10);
//						m /= 10;
//					}
//					while (d)
//					{
//						b += (d % 10);
//						d /= 10;
//					}
//					if (a == b)
//						count++;
//				}
//				break;
//			case 4:
//			case 6:
//			case 9:
//			case 11:
//				for (day = 1; day <= 30; day++)
//				{
//					int a = 0;
//					int b = 0;
//					int y = year;
//					int m = month;
//					int d = day;
//					while (y)
//					{
//						a += (y % 10);
//						y /= 10;
//					}
//					while (m)
//					{
//						b += (m % 10);
//						m /= 10;
//					}
//					while (d)
//					{
//						b += (d % 10);
//						d /= 10;
//					}
//					if (a == b)
//						count++;
//				}
//				break;
//			case 2:
//				if((year%4==0&&year%100!=0)||year%400==0)
//					for (day = 1; day <= 29; day++)
//					{
//						int a = 0;
//						int b = 0;
//						int y = year;
//						int m = month;
//						int d = day;
//						while (y)
//						{
//							a += (y % 10);
//							y /= 10;
//						}
//						while (m)
//						{
//							b += (m % 10);
//							m /= 10;
//						}
//						while (d)
//						{
//							b += (d % 10);
//							d /= 10;
//						}
//						if (a == b)
//							count++;
//					}
//				else
//					for (day = 1; day <= 28; day++)
//					{
//						int a = 0;
//						int b = 0;
//						int y = year;
//						int m = month;
//						int d = day;
//						while (y)
//						{
//							a += (y % 10);
//							y /= 10;
//						}
//						while (m)
//						{
//							b += (m % 10);
//							m /= 10;
//						}
//						while (d)
//						{
//							b += (d % 10);
//							d /= 10;
//						}
//						if (a == b)
//							count++;
//					}
//				break;
//
//			default:
//				break;
//			}
//		}
//	}
//	printf("%d", count);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	double arr[30] = { 99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 };
//	int count = 0;
//	for (int i = 0; i < 30; i++)
//	{
//		double n = 2022 / arr[i];
//		for (int j = i+1; j < 30; j++)
//			if (arr[j] > n)
//				count++;
//	}
//	printf("%d", count);
//}
//#include<stdio.h>
//void juzhen(long long num);
//int main() 
//{
//	int num[30][60] = { 1,1,0,,0,,1,0,,,,,0,0,0,0,1,1,1,1,1,1,1,0,1,0,1,0,01,0,0,1,,0,0,1,10,,1,01,,0,1,1,1,01,1,0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,1,1,0,
//  0,1,,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,1,1,1,1,1,0,0,0,1,0,1,0,1,1,0,00,,1,1,,1,,,,1,,0
//  001011101000100011111111111010000010010101010111001000010100
//  101100001101011101101011011001000110111111010000000110110000
//  010101100100010000111000100111100110001110111101010011001011
//  010011011010011110111101111001001001010111110001101000100011
//  101001011000110100001101011000000110110110100100110111101011
//  101111000000101000111001100010110000100110001001000101011001
//  001110111010001011110000001111100001010101001110011010101110
//  001010101000110001011111001010111111100110000011011111101010
//  011111100011001110100101001011110011000101011000100111001011
//  011010001101011110011011111010111110010100101000110111010110
//  001110000111100100101110001011101010001100010111110111011011
//  111100001000001100010110101100111001001111100100110000001101
//  001110010000000111011110000011000010101000111000000110101101
//  100100011101011111001101001010011111110010111101000010000111
//  110010100110101100001101111101010011000110101100000110001010
//  110101101100001110000100010001001010100010110100100001000011
//  100100000100001101010101001101000101101000000101111110001010
//  101101011010101000111110110000110100000010011111111100110010
//  101111000100000100011000010001011111001010010001010110001010
//  001010001110101010000100010011101001010101101101010111100101
//  001111110000101100010111111100000100101010000001011101100001
//  101011110010000010010110000100001010011111100011011000110010
//  011110010100011101100101111101000001011100001011010001110011
//  000101000101000010010010110111000010101111001101100110011100
//  100011100110011111000110011001111100001110110111001001000111
//  111011000110001000110111011001011110010010010110101000011111
//  011110011110110110011011001011010000100100101010110000010011
//  010011110011100101010101111010001001001111101111101110011101 }
//}
//void juzhen(long long num)
//{
//	juzhen(num / 10);
//	printf("%lld,", num % 10);
//}
//#include<iostream>
//using namespace std;
//int main()
//{
//    int day;
//    int n;
//    cin >> day;
//    cin >> n;
//    cout << (day + n) % 7;
//    return 0;
//}
//#include<stdio.h>
//int main()
//{
//	printf("%d", -1 * -5);
//	return 0;
//}
//#include<stdio.h>
//#include<math.h>
//int main()
//{
//    int count = 0;
//    int W, H, n, R;
//    scanf("%d%d%d%d", &W, &H, &n, &R);
//    int sign[W][H] = { 0 };
//    int arr[n][2];
//    for (int i = 0; i < n; i++)
//        scanf("%d%d", &arr[i][0], &arr[i][1]);
//    for (int x = 0; x < n; x++)
//        for (int i = 0; i <= W; i++)
//            for (int j = 0; j <= H; j++)
//            {
//                if (sign[i][j] == 0)
//                {
//                    double flag = sqrt(fabs((arr[x][0] - i) * (arr[x][1] - j)));
//                    if (flag <= R)
//                    {
//                        count++;
//                        sign[i][j] = 1;
//                    }
//                }
//            }
//    printf("%d", count);
//    return 0;
//}
// ////******
//#include<iostream>
//#include<cmath>
//#include<vector>
//#include<cstdlib>
//using namespace std;
//int main()
//{
//    int count = 0;
//    int W, H, n, R;
//    scanf("%d%d%d%d", &W, &H, &n, &R);
//    vector<vector<int>> sign(W+1, vector<int>(H+1));
//    vector<vector<int>> arr(n, vector<int>(2));
//    for (int i = 0; i < n; i++)
//        scanf("%d%d", &arr[i][0], &arr[i][1]);
//    for (int x = 0; x < n; x++)
//        for (int i = 0; i <= W; i++)
//            for (int j = 0; j <= H; j++)
//            {
//                if (sign[i][j] == 0)
//                {
//                    int flag1 =(arr[x][0] - i) * (arr[x][1] - j);
//                    if (flag1 < 0)
//                        flag1 = -flag1;
//                    int flag2 = sqrt(flag1);
//                    if (flag2 <= R)
//                    {
//                        count++;
//                        sign[i][j] = 1;
//                    }
//                }
//            }
//    printf("%d", count);
//    return 0;
//}
//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
//	int n, m;
//	scanf("%d%d", &n, &m);
//	vector<vector<int>> water(n, vector<int>(m));
//	int t;
//	scanf("%d", &t);
//	vector<vector<int>> swep(t, vector<int>(4));
//	for (int i = 0; i < t; i++)
//		scanf("%d%d%d%d", &swep[i][0], &swep[i][1], &swep[i][2], &swep[i][3]);
//	for (int i = 0; i < t; i++)
//		for (int x = swep[i][0] - 1; x < swep[i][2]; x++)
//			for (int y = swep[i][1] - 1; y < swep[i][3]; y++)
//				water[x][y] = 1;
//	int count = 0;
//	for (int x = 0; x < n; x++)
//		for (int y = 0; y < m; y++)
//			if (water[x][y] == 0)
//				count++;
//	printf("%d", count);
//	return 0;
//}
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	int n;
	scanf("%d", &n);
	vector<int> arr(n+1);
	for (int i = 1; i <= n; i++)
		scanf("%d", &arr[i]);
	int k;
	scanf("%d", &k);
	for (int i = 1; i <= n; i++)
	{
		int m = INT_MAX;
		for (int j = i - k; j <= i + k; j++)
		{
			if (j<1 || j>n)
				continue;
			m = min(m, arr[j]);
		}
		printf("%d ", m);
	}
	return 0;
}
//#include<iostream>
//#include<vector>
//using namespace std;
//int main()
//{
//	int n, m;
//	scanf("%d%d", &n, &m);
//	vector<vector<int>> skite(n, vector<int>(m));
//	for (int i = 0; i < n; i++)
//		for (int j = 0; j < m; j++)
//		{
//
//		}
//	return 0;
//}
//int high(vector<vector<int>> arr)
//{
//
//}